<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// 缓存函数（memoize）是一个优化技术，用于缓存函数的计算结果，以避免重复计算相同的输入。
		function memoize(fn){
			const cache = new Map()
			return function(...args){
				const key = JSON.stringify(args)
				if (cache.has(key)){
					return cache.get(key)
				}
				const result = fn(...args)
				cache.set(key,result)
				return result
			}
		}
	const add = (a, b) => a + b;
	const memoizedAdd = memoize(add);
	
	console.log(memoizedAdd(2, 3)); // 计算 5
	console.log(memoizedAdd(2, 3)); // 从缓存读取 5
	
	
	const getKeys = obj => Object.keys(obj).join(',');
	const memoizedGetKeys = memoize(getKeys);
	
	console.log(memoizedGetKeys({x: 1})); // 计算 "x"
	console.log(memoizedGetKeys({x: 1})); // 从缓存读取 "x"（注意：不同对象但内容相同）
	
	
	const checkNaN = x => Number.isNaN(x);
	const memoizedCheck = memoize(checkNaN);
	
	console.log(memoizedCheck(NaN));     // true（被缓存）
	console.log(memoizedCheck(undefined)); // true ❌ 错误共享缓存（因为 key 都是 "null"）
	
	let count = 0;
	const counterFn = () => ++count;
	const memoizedCounter = memoize(counterFn);
	
	console.log(memoizedCounter()); // 1
	console.log(memoizedCounter()); // 1（正确缓存）


</script>
</html>